package com.weixing.mall.push;

import jodd.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 个推服务模块
 *
 * @author  siashan
 * @date  2021/1/22 9:45
 * @since  1.0
 **/
@Component("gtFwComponent")
public class GtFwComponent {


    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 获取服务端token
     *
     * @return token
     */
    public String getFwToken() {
        String token = stringRedisTemplate.opsForValue().get(GtConst.REDIS_FTOKEN_PRE);
        if (StringUtil.isEmpty(token)) {
            token = GtUtil.getFwToken();

            stringRedisTemplate.opsForValue().set(GtConst.REDIS_FTOKEN_PRE, token, 23, TimeUnit.HOURS);
        }
        return token;
    }

    /**
     * 绑定别名
     * @param aliasList 别名列表
     */
    public void bindAlias(List<CidAlias> aliasList) {
        GtUtil.bindAlias(aliasList, getFwToken(), GtConst.F_BIND_ALIAS_URL);
    }


    /**
     * 全推
     *
     * @param pushMsg  推送消息
     */
    public void pushAll(PushMsg pushMsg) {
        GtUtil.pushAll(pushMsg, getFwToken(), GtConst.F_PUSH_ALL_URL);
    }

    /**
     * 向单个用户推送消息，可根据cid指定用户
     *
     * @param pushMsg 推送消息
     * @param cid cid
     */
    public void pushToSingleCid(PushMsg pushMsg, String cid) {
        GtUtil.pushToSingleCid(pushMsg, cid, getFwToken(), GtConst.F_PUSH_TOSINGLECID_URL);
    }


    /**
     * 创建消息
     *
     * @param pushMsg
     */
    public String listMessage(PushMsg pushMsg) {
        return GtUtil.listMessage(pushMsg, getFwToken(), GtConst.F_PUSH_LISTMESSAGE_URL);
    }


    /**
     * 批量发送消息给cid
     *
     * @param pushMsg
     */
    public void listCid(PushMsg pushMsg, List<String> cids) {
        int listSize = cids.size();
        int toIndex = 200;
        for (int i = 0; i < listSize; i += 200) {
            if (i + 200 > listSize) {
                toIndex = listSize - i;
            }
            List newList = cids.subList(i, i + toIndex);
            GtUtil.listCid(newList, listMessage(pushMsg), getFwToken(), GtConst.F_PUSH_LISTCID_URL);
        }


    }


}
